如同 C spec (參考 C11 5.1.2.2.1 Program startup),YARV 的 entry 是 main.c 的 main(),長得很單純:
int
main(int argc, char **argv)
{
#ifdef ...
ruby_sysinit(&argc, &argv);
return rb_main(argc, argv);
}
執行 ruby 指令建立 process 時 main()
會先被呼叫 (TODO: 寫個 C helloworld 看 compile 出的 ELF CODE 長什麼樣,如何在 startup 呼叫 main()
)。
ruby_sysinit()
看起來與執行 ruby 程式沒有直接關係 (複製一份 argc argv 到 origarg,操作 file descriptors),所以主要 interpreter 功能實作會在 rb_main()
。
rb_main()
裡面可以看到常聽到的 stack, context, node。我們寫的 ruby 程式,應該是被轉換成 node,對應到 YARV 的 instruction 然後執行。